package com.system.cacheClient.client;

import com.system.cacheClient.common.CacheR;

import java.util.Set;

/**
 * Set缓存客户端接口
 * 提供Set类型的特殊操作方法
 */
public interface SetCacheClient {
    
    /**
     * 向Set中添加元素
     * @param key Set键
     * @param values 要添加的元素
     * @param <T> 数据类型
     * @return 添加成功的元素个数
     */
    <T> CacheR<Long> sadd(String key, T... values);
    
    /**
     * 从Set中移除元素
     * @param key Set键
     * @param values 要移除的元素
     * @param <T> 数据类型
     * @return 移除成功的元素个数
     */
    <T> CacheR<Long> srem(String key, T... values);
    
    /**
     * 获取Set中所有元素
     * @param key Set键
     * @param <T> 数据类型
     * @return Set中的所有元素
     */
    <T> CacheR<Set<T>> smembers(String key);
    
    /**
     * 判断元素是否在Set中
     * @param key Set键
     * @param member 元素
     * @param <T> 数据类型
     * @return 是否存在
     */
    <T> CacheR<Boolean> sismember(String key, T member);
    
    /**
     * 获取Set的大小
     * @param key Set键
     * @return Set的大小
     */
    CacheR<Long> scard(String key);
    
    /**
     * 从Set中随机弹出一个元素
     * @param key Set键
     * @param <T> 数据类型
     * @return 弹出的元素
     */
    <T> CacheR<T> spop(String key);
}